# Title: Aceptar el teclado                       		                            Filename: TecladoGera.s
# Author: Pérez Castañeda Jonathan Gerardo                                          Date: 21 / Mar / 2017
# Description: Aceptar el teclado
# Input: -
# Output:


@TecladoGera.s

#aceptar numeros del teclado y hacer calculos

@registros
@r1 - apuntador a buffer
@r2 - temporal de digitos
@r3 - contador de digitos
@r4 - multiplicador
@r5 - contador
@r0 - regreso de valor

.section .bss
.comm buffer,48       @reservando el buffer con 48 bytes

#Data Segment

.section .data
msg:
    .ascii "Ingrese un Numero: "
  msgLen = .-msg
 
 .section .text
 .globl _start
 #Code Segment
 _start:
 
 mov r0, $1
 ldr r1,=msg
 ldr r2,msgLen
 mov r7, $4
 svc $0 
                      @ entrada de datos 
 mov r7,$3            @ 3 es una funcion de"leer" de syscall
 mov r0,$1
 ldr r1,=buffer
 mov r2, $0x30
 svc $0
 
 ldrb r2, [r1]
 mov r3, $0
 
 pushDigits:
 stmfd sp!,{r2}   		@guardar digito en la pila
 add r3,r3,$1    	    @incremetar contador de digitos
 ldrb r2,[r1,#1]! 		@sigiente digito
 cmp r2, $0xA     		@checar si es enter
 beq convDigits   		@salto a subproceso de convestion
 bne pushDigits   		@o continuar Agregando digitos
 
 convDigits:
 mov r4, $1       		@inicializar multiplicador
 mov r0,$0        		@ inicializar numero
 mov r6, $0       		@inicializar contador

jumpBack:
ldmfd sp!,{r2} 			  @ sacar un digito de la pila  
cmp r2, $0x30     	  @ pregunta: ¿Es digito?
blt error
cmp r2,$x39        		@ seguro?
blt error
sub r2,r2, $0x30  	  @ obtener el valor numerico
mul r2,r4,r2       		@ multiplicar por r4
add r0,r0,r2       		@ sumar a r0
add r6,r6,$1      		@ Se incrementa el contador
cmp r6,r3       	    @ revisar si termiamos
beq exit
mov r5,r4,lsl $3
add r4,r5,r4,lsl $1
bal jumpBack

error:
mov r0, $-1
bal exit

exit:
mov r7,$1
svc $0
.end
